23

» WarCraft 3 / Проблема с мемхаком

Похожие вопросы:

ответ
закрыт по таймауту
ответ
Работает только с 5d версией? Rebuild настройку не поддерживает?
Или можно Rebuild 1.4 взять?
Не зависит, с какой он будет работать.
Главное, не была в пути русских букв или других букв юникода. Только англ. буквы.
И советовал бы иметь две копии JPNG с мемхаком и без него.
Ну с разными pjass.exe
ответ
Анихак лаунчер заточен под борьбу с картой лича, поэтому не дает запускать все карты с мемхаком, пока есть возможноть это обойти - моя карта яркий пример, а так инфы подробной в паблик никто не сливал чтобы ракап не сделал апгрейд защиты...
ответ
Если не решится проблема с макросами, можно избавиться от них.
//! runtextmacro ITEM_SHARING_INITIAL_DATA() // <- найти эту строчку и вписать туда настройки

call ItemShare.data('I000', 'I001')
call ItemShare.data('I002', 'I003')
call ItemShare.data('I004', 'I005')
call ItemShare.data('I006', 'I007')
В стандартном JNGP, работает без проблем.
ответ
Конечно можно, просто передать этих юнитов другим игрокам.

23

» WarCraft 3 / Не работает World Editor

Похожие вопросы:

ответ
nvc123, да, и я это уже понял
ответ
Вершины все правильно прикреплены к костям?
ответ
vLAd333, с помощью сайта конвертировал в какой формат?
посмотрел карту
блин я же просил проверить пути к текстурам
мало того что везде war3mapImported которого быть не должно
так ещё и модель требует разрезать картинку на 4 части
короче читаем статьи про создание лоадскринов и импорт файлов в карту
ответ
8gabriel8, ни разу не сталкивался с вылетами редактора при длительной работе. Как я считаю, Reforged переписал пути к WC3 в регистре, из-за чего старый редактор перестал работать, но это лишь догадка.
ответ
"Black Soul"
Открыть редактор реестра (Windows + R, ввести regedit).
Перейти по пути HKEY_CURRENT_USER\SOFTWARE\Blizzard Entertainment\WorldEdit.
Найти строку Tool Windows и удалить ее.
Но проблема повторится, если зайти в редактор 1.32. При ее возникновении нужно заново удалить строку "Tool Windows".

23

» WarCraft 3 / Как сделать цветной текст?

Похожие вопросы:

ответ
Примеры можешь посмотреть на скрине. Карта уже на уровне проверки ников определяет игрока-админа и дает ему кастомный ник.
Если нужно чтобы мог менять во время игры цвет и т.д. Создаешь команду, которая при введении подстроки меняет ник на конструкцию и в действиях даешь concacetrate strings |CFF + (код цвета) + его текущий ник (или ник которая игра будет хранить в переменной), или банально он самостоятельно будет вводить ник с нужными кодами.
Но помни, коды цветов занимают место в нике по буквам, и часть текста в чате будет в конце обрезаться, если нету системы выгружающий введенные тексты в чат, например, в мультиборд или на экраны игроков.

23

» WarCraft 3 / Pick every unit

Похожие вопросы:

ответ
ответ
Pick every unit in range [250] matching condition [бафф спелла]
Всё что находится внутри данного блока произойдёт столько раз, сколько воинов находится внутри выбранной группы. Обратиться к воину можно через Picked Unit ( GetEnumUnit( ) ). Если Вам нужно добавить событие на смерть именно этих воинов, то прямо здесь внутри блока добавляете их в событие триггера, выбрав их через Picked Unit, или сохраняете их в переменные.

Также можно не сохранять каждого воина, а занести их в отдельную группу. А вместо проверки:
Условие: Dying unit = Aim [Integer A]
проверяете, находится ли воин в группе.
ответ
triggering unit - юнит-инициатор, в зависимости от события триггера
измени переменную triggering unit на matching unit. Неудивительно, что оно срабатывает, там фильтр принимает истину для каждого matching unit
matching unit - работает в фильтре, который отсеивает всех выбранных по условию. если условие вернет истину, значит, добавляет в группу. если не подходит, отсеивает.
picked unit - выбранный юнит

даем героям опыт, которые еще живы. +еще какие-то условия

объяснение (если раскрыть обертку)
вот тут выбирает всех юнитов в группу g с необходимым условием f. Внутри фильтра matching unit (на jass GetFilterUnit)
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea ,f)
далее перебираете каждого PickedUnit (GetEnumUnit), и что то делаете с ними
call ForGroup(g,function ....)

23

» WarCraft 3 / Демоническая сила.

Похожие вопросы:

ответ
Ну это сплеш, на тип урона не проверял, область настраивается и кол-во урона, оно же урон по аое.
Не все, а орбы предметов, орб может включить вторую атаку героя, только если она изначально выключена и есть. По этой причине владельцы орбов порой считаются юнитами дальнего боя, что разумеется не так (вторая атака всегда атака дальнего боя у всех дефолтных героев в варкравте, особо вторую атаку никто не настраивает.)
В орбах вроде сферы огня нету ничего интересного или полезного, лучше делать руками те эффекты которые они дают.

23

» WarCraft 3 / Плавающий текст (новая версия варика)

Похожие вопросы:

ответ
~8gabriel8:
Например, так.
Создаёшь текст, периодическим триггером на 0.01 секунды его смещаешь. Но всё равно текст сильно дёргается. Надо вскрывать маньяка, либо DGUI, чтобы посмотреть, как там ровно сделано.
ответ
Yury13, что значит изображение? Плавающий текст - это объект. У которого имеются такие параметры как: текст, размер, расположение на карте, цвет, видимость и т. д.
а родная функция редактора "Уничтожить последний созданный текст"
Совершенно верно. Данная функция удаляет текстаг. Также тексттагу можно задать время жизни, как указал NazarPunk. После истечении указанного времени тексттаг самоуничтожится, главное не забудьте обнулить переменную, если работаете в jass.
ответ
TeX13, есть.
call  SetTextTagVisibility(tt, IsVisibleToPlayer(x, y, GetLocalPlayer()))

23

» WarCraft 3 / Не работает проверка условия регион в области юнита

Похожие вопросы:

ответ
Утечка - это когда не удаляются ненужные объекты. Здесь регион нельзя удалять, потому что без него событие не будет работать. Но если у вас много таких событий, то лучше использовать один регион для всех событий, при условии, что размеры региона не будут изменяться в процессе игры, потому что это может нарушить работу других событий, привязанных к данному региону.
А функция TriggerRegisterEnterRectSimple в теории не утечна, но на практике может утекать, например, если в потоке триггера будет вызвано её уничтожение RemoveRegion(GetTriggeringRegion()).

23

» WarCraft 3 / Проблема в редакторе обьектов

Похожие вопросы:

ответ
Модель можешь расположить куда захочешь, а вот текстура должна быть в корне карты(в модели она так занесена).
\flag.blp
Должно работать, пробуй.
ответ
Удерживая shift нажимаешь на поле которое надо изменить, ставишь число -1.00 к примеру
Ставится на всех редакторах, но для начала зайти в настройки редактора и подтвердить использование отрицательных значений
ответ
  1. Открываешь модель через mdlvis.
  2. Редактор анимаций.
  3. Вкладка "Анимки".
  4. Нажимаешь кнопку Глобальная.
  5. Вкладка "Движение".
  6. Выбираешь кость с названием "Bone_Root" или "bone_b0".
  7. Выбираешь инструмент "Масштабирование" и меняешь размер.
П.С. Глобальную анимация можно не создавать, если такая уже есть (название из цифр).

23

» WarCraft 3 / Вопрос насчет ресурса

Похожие вопросы:

ответ
Wyett, ты можешь добавлять подобные этим:
function ... takes ... returns ...
Код
endfunction
Резака купить можно, но это будет абсолютно не похоже на покупку дирижабля.

23

» WarCraft 3 / Полет снаряда в цель и триггерный урон

Похожие вопросы:

ответ
~8gabriel8:
Ещё можешь наносить вместо отравления иной бафф, а отравлять даммиком. По этому баффу сможешь различать урон от автоатаки и способности.

23

» WarCraft 3 / Не переноситься кэш

Принятый ответ
Похожие вопросы:

ответ
Нет, тока кешь - тем более лимита на число значений в файле кеша нету, хоть миллион значений заноси.
По мимо героя, что тебе надо :
  1. Можно пробовать Preload Exploit, но если чесно - кешь удобнее, особенно для гуишников.
ответ
8gabriel8, последний созданный кэш содержит кэш который был создан в данной карте (что логично)
следовательно тебе надо заново создавать кэш в каждой миссии
желательно в отдельном триггере с событием прошло 0 секунд

23

» WarCraft 3 / РПГ камера

Похожие вопросы:

ответ
1 Есть же функиця Камера - rotate camera around point.
2 Да
ответ
Смею предположить, что все что ниже уровня моста на скринах - декор под пустой текстурой (альфа-тайл)

23

» WarCraft 3 / Актуальность версии Warcraft III

Похожие вопросы:

ответ
Уже давно всё придумали. Вот ресурс. Необходимо добавить только детект для версии 1.32.
ScorpioT1000:
там 24 игрока, но константу не обновили
Всё там обновили, теперь у этой константы не hardcoded значение, а значение из нативки. Для карт, созданных в WE до 1.29, нативка возвращает 12, после - 24.
    // Game constants
    constant integer   bj_MAX_INVENTORY                 =  6
    constant integer   bj_MAX_PLAYERS                   =  GetBJMaxPlayers()
    constant integer   bj_PLAYER_NEUTRAL_VICTIM         =  GetBJPlayerNeutralVictim()
    constant integer   bj_PLAYER_NEUTRAL_EXTRA          =  GetBJPlayerNeutralExtra()
    constant integer   bj_MAX_PLAYER_SLOTS              =  GetBJMaxPlayerSlots()
    constant integer   bj_MAX_SKELETONS                 =  25
    constant integer   bj_MAX_STOCK_ITEM_SLOTS          =  11
    constant integer   bj_MAX_STOCK_UNIT_SLOTS          =  11
    constant integer   bj_MAX_ITEM_LEVEL                =  10
Ответ удалённому комментарию ниже: так как HandleId равно -1, то объекта нет, потому и уничтожать не нужно.

23

» WarCraft 3 / Плавающий текст, следующий над юнитом (Reforged)

Похожие вопросы:

ответ
Атака оглушением вызывает подобную ерунду. Да и не только.
Например в доте бы вылетало сообщение 0 при атаке имея МКБ - сообщался бы урон, урон от микробаша, если бы выпал и 0.00 от нулевого критического удара.
Решение простое - поставь условие, что полученный урон больше 0.00, тогда только выводить.
ответ
но когда срабатывает одновременно в некоторых случаях текст остается, в чем причина не знаю
причина в бж функциях
избавься от бж и всё норм будет

23

» WarCraft 3 / Как создавать приказы юнитам?

Похожие вопросы:

ответ
UniverseRuler, в доте 6-6 использованы игроки 13 и 14
тебе нужно просто сохранять приказ отданный триггерно(ты ведь ими будешь юнитами управлять)
и восстанавливать его при получение приказа для игрока
для этого нужна буленовская переменная для определения триггерный это приказ или нет
и структура/хэш/юзердата для сохранения приказа
UniverseRuler:
еще остались асы картостроения, но а сейчас начинаю думать, что их все таки нету
если ас картостроения это человек который воплощает все ваши фантазии в жизнь то тут таких нету и не было
ещё можно создавать всех юнитов за 1 резервного игрока
а автоатаку делать триггерно
этот вариант самый лучший но то просто не сможешь его сделать
ибо нужны джасс+алгоритмы+структуры/хэш
а ты судя по всему ничего из этого не знаешь
ответ
pro100master, но ведь это собьет и его текущие приказы?

Upd.:Я понял в чем проблема.
Я хочу чтоб можно было использовать способности юнита, при этом чтоб были недоступны атака/перемещение итд., а ведь это тоже его способности...
Короче я загнал себя в угол.
Пожалуй пойду по пути создания торговца-здания.
Но если у кого есть решение моей дилемы - буду рад!
ответ
после разложения костей юниты сами выгружаются из памяти
функция "wait" то же вызывает утечки
она не вызывает утечки, она сама по себе кривая и не подходит под большинство задач
если создать переменную "Point" типа "точка" и изначально задать ей положение центр области "Final", а потом обращаться уже к этой переменной "Point" в триггере событие "боевая единица входит в область "Start", действие "отдать приказ боевой единице следовать в "Point" , то новые точки создаваться не будут?
да
только в гуи еще и создание юнитов утекает тоже насколько я помню, надо тоже заранее точку делать
впринципе можно было бы обойтись одной точкой на все действия, но вам видимо пока рано

23

» WarCraft 3 / Контроль сохранений

Похожие вопросы:

ответ
pro100master, но ведь это собьет и его текущие приказы?

Upd.:Я понял в чем проблема.
Я хочу чтоб можно было использовать способности юнита, при этом чтоб были недоступны атака/перемещение итд., а ведь это тоже его способности...
Короче я загнал себя в угол.
Пожалуй пойду по пути создания торговца-здания.
Но если у кого есть решение моей дилемы - буду рад!

23

» WarCraft 3 / Бафф Ловчий.

Похожие вопросы:

ответ
Кет, баф накладывается когда прилетает снаряд
при касте бафа нету
поэтому он и не снимается
ответ
SetUnitPropWindow
Спс, что то раньше этой нативки не видел, ну пока сделал на пересоздании предмета, там посмотрим.

23

» WarCraft 3 / Критическая ошибка в карте

Похожие вопросы:

ответ
nvc123:
PT153, в карте утечки
утечки может вызывать всё что угодно кроме чисел и игроков
Да, уже я выяснил, что в карте были утечки multiboard item, из-за отсутствия MultiboardReleaseItem.
ответ
GRESHNIK1, ошибку вызывает каждая из 3 моделей?
или лишь 1 из них?
ну а вообще критует из за того что модель кривая
либо брось это дело либо сконверти их в mdl и правь через блокнот
ответ
Уже ничего не поделаешь, скорее всего. На будущее - не давать областям и другим объектам названий на русском.

23

» WarCraft 3 / Нужна иконка!

Похожие вопросы:

ответ
Вот, держи)
ответ
RAKAJL, "Графика - Пиктограмма: игровой интерфейс".
ответ
Все что есть коснанты являет разрешеным а остальные пока напрямую обратить нельзя (некоторые работали) Моли близзарду чтобы все равкод поля открыли
ответ
Ты прав в ПО и ИИ их нет, достать пути можно с помощью war3.mpq, держи:
иконки
ReplaceableTextures\CommandButtons\BTNRallyPointUndead.blp
ReplaceableTextures\CommandButtons\BTNRallyPointNightElf.blp
ReplaceableTextures\CommandButtons\BTNOrcRallyPoint.blp
модели флага
UI\Feedback\RallyPoint\NightElfRallyFlag.mdx
UI\Feedback\RallyPoint\OrcRallyFlag.mdx
UI\Feedback\RallyPoint\UndeadRallyFlag.mdx

И да, вот твоя синяя иконка - ReplaceableTextures\CommandButtons\BTNSelectUnit.blp

23

» WarCraft 3 / Вопрос по системе Save/Load

Похожие вопросы:

ответ
Кто-то объяснит почему 36 символьная система? можно использовать разные case написания ещё ведь. Да и еще кучу других символов. Почему именно 36, непонятно..
theGCI, NickIAm тебе вроде нормальный гайд выложил, там доступно написано.
NickIAm:
Используя только английский язык например можно задействовать 94 символа.. как пример
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&* ()_+=,.<>?/:;'{}[]|\~` 
function SaveLoad_InitialSetup takes nothing returns nothing
    local integer i = 0
    local integer j = 0

    loop
        set udg_SaveLoad_Compress[i + 48] = j
        set udg_SaveLoad_Uncompress[i] = i + 48
        set j = j + 1
        set i = i + 1
        exitwhen i >= 10
    endloop
    set i = 0
    loop
        set udg_SaveLoad_Compress[i + 97] = j
        set udg_SaveLoad_Compress[i + 65] = j + 26
        set udg_SaveLoad_Uncompress[i + 10] = i + 97
        set udg_SaveLoad_Uncompress[i + 26 + 10] = i + 65
        set j = j + 1
        set i = i + 1
        exitwhen i >= 26
    endloop
endfunction

function SaveLoad_Id2CId takes integer n returns integer
    local integer i = n / (256 * 256 * 256)
    local integer r
    set n = n - i * (256 * 256 * 256)
    set r = udg_SaveLoad_Compress[i]
    set i = n / (256 * 256)
    set n = n - i * (256 * 256)
    set r = r * 64 + udg_SaveLoad_Compress[i]
    set i = n / 256
    set r = r * 64 + udg_SaveLoad_Compress[i]
    return r * 64 + udg_SaveLoad_Compress[n - i * 256]
endfunction

function SaveLoad_CId2Id takes integer n returns integer
    local integer i = n / (64 * 64 * 64)
    local integer r
    set n = n - i * (64 * 64 * 64)
    set r = udg_SaveLoad_Uncompress[i]
    set i = n / (64 * 64)
    set n = n - i * (64 * 64)
    set r = r * 256 + udg_SaveLoad_Uncompress[i]
    set i = n / 64
    set r = r * 256 + udg_SaveLoad_Uncompress[i]
    return r * 256 + udg_SaveLoad_Uncompress[n - i * 64]
endfunction


function SaveLoad_Unit2Integer takes unit u returns integer
    local integer i = 0
    local integer n = GetUnitTypeId(u)
    if udg_SaveLoad_Initialized == false then
        set udg_SaveLoad_Initialized = true
        call SaveLoad_InitialSetup()
    endif
    loop
        set i = i + 1
        exitwhen i > udg_SaveLoad_Heroes_LastIndex
        if udg_SaveLoad_Heroes[i] == n then
            return i
        endif
    endloop
    return SaveLoad_Id2CId(n)
endfunction
function SaveLoad_Integer2Unit takes integer i returns integer
    if udg_SaveLoad_Initialized == false then
        set udg_SaveLoad_Initialized = true
        call SaveLoad_InitialSetup()
    endif
    if i <= udg_SaveLoad_Heroes_LastIndex then
        return udg_SaveLoad_Heroes[i]
    endif
    return SaveLoad_CId2Id(i)
endfunction

function SaveLoad_Item2Integer takes item t returns integer
    local integer i = 0
    local integer n = GetItemTypeId(t)
    if udg_SaveLoad_Initialized == false then
        set udg_SaveLoad_Initialized = true
        call SaveLoad_InitialSetup()
    endif
    loop
        set i = i + 1
        exitwhen i > udg_SaveLoad_Items_LastIndex
        if udg_SaveLoad_Items[i] == n then
            return i
        endif
    endloop
    return SaveLoad_Id2CId(n)
endfunction
function SaveLoad_Integer2Item takes integer i returns integer
    if udg_SaveLoad_Initialized == false then
        set udg_SaveLoad_Initialized = true
        call SaveLoad_InitialSetup()
    endif
    if i <= udg_SaveLoad_Items_LastIndex then
        return udg_SaveLoad_Items[i]
    endif
    return SaveLoad_CId2Id(i)
endfunction

function SaveLoad_Ability2Integer takes integer a returns integer
    local integer i = 0
    if udg_SaveLoad_Initialized == false then
        set udg_SaveLoad_Initialized = true
        call SaveLoad_InitialSetup()
    endif
    loop
        set i = i + 1
        exitwhen i > udg_SaveLoad_Abilities_LastIndex
        if udg_SaveLoad_Abilities[i] == a then
            return i
        endif
    endloop
    return SaveLoad_Id2CId(a)
endfunction
function SaveLoad_Integer2Ability takes integer i returns integer
    if udg_SaveLoad_Initialized == false then
        set udg_SaveLoad_Initialized = true
        call SaveLoad_InitialSetup()
    endif
    if i <= udg_SaveLoad_Abilities_LastIndex then
        return udg_SaveLoad_Abilities[i]
    endif
    return SaveLoad_CId2Id(i)
endfunction

function SaveLoad_Color takes string s returns string
    local integer i = StringLength(s)
    local string c
    local string r = ""

    loop
        set i = i - 1
        set c = SubString(s,i,i + 1)
        if c == "0" or c == "1" or c == "2" or c == "3" or c == "4" or c == "5" or c == "6" or c == "7" or c == "8" or c == "9" then
            set r = "|cffffcc00" + c + "|r" + r
        elseif c == "-" then
            set r = "|cffdddddd-|r" + r
        elseif c == "a" or c == "b" or c == "c" or c == "d" or c == "e" or c == "f" or c == "g" or c == "h" or c == "i" or c == "j" or c == "k" or c == "l" or c == "m" or c == "n" or c == "o" or c == "p" or c == "q" or c == "r" or c == "s" or c == "t" or c == "u" or c == "v" or c == "w" or c == "x" or c == "y" or c == "z" then    
            set r = "|cff00cc00" + c + "|r" + r
        elseif c == "A" or c == "B" or c == "C" or c == "D" or c == "E" or c == "F" or c == "G" or c == "H" or c == "I" or c == "J" or c == "K" or c == "L" or c == "M" or c == "N" or c == "O" or c == "P" or c == "Q" or c == "R" or c == "S" or c == "T" or c == "U" or c == "V" or c == "W" or c == "X" or c == "Y" or c == "Z" then    
            set r = "|cff3399ff" + c + "|r" + r
        else
            set r = c + r
        endif
        exitwhen i <= 0
    endloop
    return r
endfunction

function SaveLoad_EncodeChar takes string n returns integer
    local integer i = 0
    local string s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    local string s2 = "abcdefghijklmnopqrstuvwxyz"
    local string s3 = "0123456789"

    loop
        if SubString(s1,i,i + 1) == n then
            return i
        endif
        if SubString(s2,i,i + 1) == n then
            return i
        endif
        set i = i + 1
        exitwhen i >= 26
    endloop
    set i = 0
    loop
        if SubString(s3,i,i + 1) == n then
            return i
        endif
        set i = i + 1
        exitwhen i >= 10
    endloop
    return 0
endfunction

function SaveLoad_EncodeVerify takes string buffer returns integer
    local integer i = 0
    local integer j = 0
    local string name = GetPlayerName(GetTriggerPlayer())
    if udg_SaveLoad_UsePlayername == true then
        loop
            set j = j + SaveLoad_EncodeChar(SubString(name,i,i + 1))
            set i = i + 1
            exitwhen i >= StringLength(name)
        endloop
    endif
    set i = 0
    loop
        set j = j + SaveLoad_EncodeChar(SubString(buffer,i,i + 1))
        set i = i + 1
        exitwhen i >= StringLength(buffer)
    endloop
    return j
endfunction

function SaveLoad_EncodeValues takes nothing returns string
    local integer i
    local integer j
    local integer k
    local integer l
    local integer m
    local integer CodeLength = StringLength(udg_SaveLoad_Alphabet)
    local integer array a
    local string buffer = ""
    local string c = ""
    local integer skip = 0
    local integer CONST = 1000000
    local string abc = "0123456789"

    set i = 0
    loop
        set i = i + 1
        exitwhen i > udg_SaveCount
        set buffer = buffer + I2S(udg_Save[i]) + "-"
    endloop
    set buffer = buffer + I2S(SaveLoad_EncodeVerify(buffer))
    if udg_Save[1] == 0 then
        set buffer = "-" + buffer
    endif

    set i = 0
    loop
        set a[i] = 0
        set i = i + 1
        exitwhen i >= 100
    endloop

    set m = 0
    set i = 0
    loop
        set j = 0
        loop
            set a[j] = a[j] * 11
            set j = j + 1
            exitwhen j > m
        endloop

        set l = 0
        set c = SubString(buffer,i,i + 1)
        loop
            exitwhen SubString(abc,l,l + 1) == c
            set l = l + 1
            exitwhen l > 9
        endloop
        set a[0] = a[0] + l

        set j = 0
        loop
            set k = a[j] / CONST
            set a[j] = a[j] - k * CONST
            set a[j + 1] = a[j + 1] + k
            set j = j + 1
            exitwhen j > m
        endloop
        if k > 0 then
            set m = m + 1
        endif
        set i = i + 1
        exitwhen i >= StringLength(buffer)
    endloop

    set buffer = ""
    loop
        exitwhen m < 0
        set j = m
        loop
            exitwhen j <= 0
            set k = a[j] / CodeLength
            set a[j - 1] = a[j - 1] + (a[j] - k * CodeLength) * CONST
            set a[j] = k
            set j = j - 1
        endloop
        set k = a[j] / CodeLength
        set i = a[j] - k * CodeLength
        set buffer = buffer + SubString(udg_SaveLoad_Alphabet,i,i + 1)
        set a[j] = k
        if a[m] == 0 then
            set m = m - 1
        endif
    endloop

    set i = StringLength(buffer)
    set skip = 0
    set c = ""
    loop
        set i = i - 1
        set c = c + SubString(buffer,i,i + 1)
        set skip = skip + 1
        if skip == 4 and i > 0 then
            set c = c + "-"
            set skip = 0
        endif
        exitwhen i <= 0
    endloop
    return c
endfunction

function SaveLoad_DecodeValues takes string s returns boolean
    local integer i
    local integer j
    local integer k
    local integer l
    local integer SaveCode = 0
    local integer m
    local integer array a
    local string buffer = ""
    local integer CodeLength = StringLength(udg_SaveLoad_Alphabet)
    local integer skip = -1
    local integer CONST = 1000000
    local string abc = "0123456789-"
    local string c

    set i = 0
    loop
        set a[i] = 0
        set i = i + 1
        exitwhen i >= 100
    endloop

    set m = 0

    set i = 0
    loop
        set j = 0
        loop
            set a[j] = a[j] * CodeLength
            set j = j + 1
            exitwhen j > m
        endloop

        set skip = skip + 1
        if skip == 4 then
            set skip = 0
            set i = i + 1
        endif

        set l = CodeLength
        set c = SubString(s,i,i + 1)
        loop
            set l = l - 1
            exitwhen l < 1
            exitwhen SubString(udg_SaveLoad_Alphabet,l,l + 1) == c
        endloop
        set a[0] = a[0] + l

        set j = 0
        loop
            set k = a[j] / CONST
            set a[j] = a[j] - k * CONST
            set a[j + 1] = a[j + 1] + k
            set j = j + 1
            exitwhen j > m
        endloop
        if k > 0 then
            set m = m + 1
        endif
        set i = i + 1
        exitwhen i >= StringLength(s)
    endloop

    loop
        exitwhen m < 0
        set j = m
        loop
            exitwhen j <= 0
            set k = a[j] / 11
            set a[j - 1] = a[j - 1] + (a[j] - k * 11) * CONST
            set a[j] = k
            set j = j - 1
        endloop
        set k = a[j] / 11
        set i = a[j] - k * 11
        set buffer = SubString(abc,i,i + 1) + buffer
        set a[j] = k
        if a[m] == 0 then
            set m = m - 1
        endif
    endloop

    set i = 0
    set j = 0
    loop
        loop
            exitwhen i >= StringLength(buffer)
            exitwhen i > 0 and SubString(buffer,i,i + 1) == "-" and SubString(buffer,i - 1,i) != "-"
            set i = i + 1
        endloop
        if i < StringLength(buffer) then
            set k = i
        endif
        set SaveCode = SaveCode + 1
        set udg_Save[SaveCode] = S2I(SubString(buffer,j,i))
        set j = i + 1
        set i = i + 1
        exitwhen i >= StringLength(buffer)
    endloop

    set j = SaveLoad_EncodeVerify(SubString(buffer,0,k))
    set udg_SaveCount = SaveCode - 1
    if j == udg_Save[SaveCode] then
        return true
    endif
    return false
endfunction

function SaveLoad_Encode takes nothing returns string
    if udg_SaveLoad_CaseSensitive == false then
        set udg_SaveLoad_Alphabet = StringCase(udg_SaveLoad_Alphabet,true)
    endif
    return SaveLoad_Color(SaveLoad_EncodeValues())
endfunction

function SaveLoad_Decode takes string s returns boolean
    if udg_SaveLoad_CaseSensitive == false then
        set udg_SaveLoad_Alphabet = StringCase(udg_SaveLoad_Alphabet,true)
        set s = StringCase(s,true)
    endif
    if SaveLoad_DecodeValues(s) then
        call DisplayTextToPlayer(GetTriggerPlayer(),0,0,"")
        return true
    endif
    call DisplayTextToPlayer(GetTriggerPlayer(),0,0,"Decoding failed")
    return false
endfunction

23

» WarCraft 3 / Проигрыш анимации

Похожие вопросы:

ответ
Примерно так:
Заранее поставить на карте область
Событие - Юнит заходит в область
Условие - Входящий юнит = (необходимый юнит)
Действие - Включить режим кинематики (скрыть интерфейс), и так далее...
Выключить этот триггер (чтобы не повторялось сначала)
Вот статья по регионам, камерам, спецэффектам:

23

» WarCraft 3 / Проблема с эффектом

Похожие вопросы:

ответ
~8gabriel8:
Это жесть, что ты сделал) Этот русификатор триггеров уж такую муть содержит, что ты просто какую-то белиберду сотворил. Исправил до рабочего вида, но чтобы совсем красиво было, это не ко мне, а к джассерам. Просто времени мало на всё, а исправление этих триггеров затратило его довольно много.
ответ
чесн, в этом триггере прекрасно все
от точки, которая создается, не используется, но удаляется
пика группы юнитов, которые все суммарно сколько их на карте нанесут бедной цели урон
и до атакованного юнита, которого вообще здесь не может быть)

что по сути, так я хз как можно прозевать "Цель способности", или как оно у вас называется в русифицированных триггерах. на стандартной версии это target of ability being cast
цикл здесь скорее всего не нужен, если конечно только смысл действительно в том что бы брать всех огров на карте и наносить цели урон.
ответ
Остальные не помню, откуда.
Сборку игры я спрашивал.
WAGARAX:
Время - 1.1 сек
Верни 5 секунд в игровых константах.
А ещё перезагрузи компьютер.